'use strict';
const Controller = require('egg').Controller;

const loginRule = {
  password: 'string',
  username: 'string',
};

class UserController extends Controller {
  async login() {
    const { ctx } = this;
    try {
      ctx.validate(loginRule, ctx.request.query);
      const data = this.ctx.request.query;
      const result = await ctx.service.user.login(data);
      ctx.body = result;
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);

    }
  }

  async create() {
    const { ctx } = this;
    try {
      ctx.validate(loginRule, ctx.request.body);
      const data = this.ctx.request.body;
      const res = await ctx.service.user.getUserOne(data.username);
      if (res) {
        ctx.body = ctx.helper.utils.responseReturn(-1, '用户已存在', {});
      } else {
        const createRes = await ctx.service.user.create(data);
        if (createRes) {
          ctx.body = ctx.helper.utils.responseReturn(1, '用户创建成功', createRes.dataValues);
        } else {
          ctx.body = ctx.helper.utils.responseReturn(-1, '用户创建失败');
        }
      }
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);
    }
  }

  async index() {
    const ctx = this.ctx;
    try {
      const query = {
        limit: ctx.helper.utils.parseInt(ctx.request.query.limit),
        offset: ctx.helper.utils.parseInt(ctx.request.query.offset),
      };
      ctx.body = ctx.helper.utils.responseReturn(1, '请求成功', await ctx.service.user.list(query));
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);
    }
  }

  async detail() {
    const ctx = this.ctx;
    try {
      const id = ctx.helper.utils.parseInt(ctx.request.query.id);
      ctx.body = ctx.helper.utils.responseReturn(1, '请求成功', await ctx.service.user.find(id));
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);
    }
  }

  async update() {
    const ctx = this.ctx;
    try {
      const id = ctx.helper.utils.parseInt(ctx.request.body.id);
      const body = ctx.request.body;
      ctx.body = ctx.helper.utils.responseReturn(1, '请求成功', await ctx.service.user.update({ id, updates: body }));
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);
    }
  }

  async del() {
    const ctx = this.ctx;
    try {
      const id = ctx.helper.utils.parseInt(ctx.request.query.id);
      ctx.body = ctx.helper.utils.responseReturn(1, '请求成功', await ctx.service.user.del(id));
    } catch (err) {
      ctx.body = ctx.helper.utils.responseReturn(-1, '未知错误', err);
    }
  }
}

module.exports = UserController;
